﻿Imports Controle
Imports Persistencia
Public Class frmCadVisitas

#Region "Variáveis"

    Private prvIDCliente As Int32
    Private prvIDContato As Int32
    Private prvIDVisita As Int32
    Private prvIDRegiao As Int32
    Private prvDataVisita As Date
    Private prvModoTela As ModoTela

    Private sMensagemValidacao As String = ""

    Private objClientes As New ctrCliente
    Private objConfiguracoes As New ctrConfiguracoes
    Private objContato As New ctrContato
    Private objStatus As New ctrStatus
    Private objRegiao As New ctrRegiao
    Private objVisitas As New ctrVisita
#End Region

#Region "Enumerações"
    Private Enum ModoTela
        eCadastro = 0
        eEdicao = 1
    End Enum
#End Region

#Region "Propriedades"
    Public Property Cliente()
        Get
            Return prvIDCliente
        End Get
        Set(ByVal value)
            prvIDCliente = value
        End Set
    End Property
    Public Property Contato()
        Get
            Return prvIDContato
        End Get
        Set(ByVal value)
            prvIDContato = value
        End Set
    End Property
    Public Property DataVisita()
        Get
            Return prvDataVisita
        End Get
        Set(ByVal value)
            prvDataVisita = value
        End Set
    End Property
    Public Property ModoTelaAtual()
        Get
            Return prvModoTela
        End Get
        Set(ByVal value)
            prvModoTela = value
        End Set
    End Property
#End Region

#Region "Métodos"
    Private Function ValidarFormulario() As Boolean
        Dim bRetorno As Boolean = True
        Dim sMsg As String
        sMensagemValidacao = ""

        Try

            If (Not VerificaSeDiaUtil(CDate(dtData.Text))) Then
                sMsg = "A data informada não é um dia útil. Deseja agendar a visita?"
                If (MsgBox(sMsg, MsgBoxStyle.YesNo, "Atenção") = MsgBoxResult.No) Then
                    Return False
                    Exit Function
                End If
            End If

            If (prvIDCliente = 0) Then
                sMensagemValidacao = "- Cliente não informado." & vbCrLf
                bRetorno = False
            End If

            If (prvIDContato = 0) Then
                sMensagemValidacao &= "- Contato não informado." & vbCrLf
                bRetorno = False
            End If

            Return bRetorno
        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.Critical, Me.Text)
        End Try
    End Function

    Private Sub CarregaDadosCliente()
        Dim drCliente As DataRow
        Dim dsContato As New DataSet
        Dim iIdStatus As Int32
        Dim iIdRegiao As Int32

        Try
            If (prvIDCliente > 0) Then
                drCliente = objClientes.selecionarCliente(prvIDCliente)
                If (Not drCliente Is Nothing) Then
                    MyBase.Codigo = prvIDCliente
                    txtIDCliente.Text = prvIDCliente
                    txtNomeCliente.Text = drCliente.Item("RazaoSocial").ToString
                    iIdStatus = Persistencia.perConversao.nuloParaZero(drCliente.Item("idStatus"))
                    iIdRegiao = Persistencia.perConversao.nuloParaZero(drCliente.Item("idRegiao"))
                    If (iIdRegiao > 0) Then
                        prvIDRegiao = iIdRegiao
                        txtRegiao.Text = objRegiao.retornarCampoRegiao("Regiao", iIdRegiao).Item("Regiao").ToString
                    End If
                    If (iIdStatus > 0) Then
                        lblStatusCliente.Text = objStatus.retornarCampoStatus("Descricao", iIdStatus).Item("Descricao").ToString
                    End If

                    dsContato = objContato.selecionarContato(prvIDContato, prvIDCliente, (prvIDContato = 0))
                    If (Not dsContato.Tables("DC_Contatos") Is Nothing AndAlso dsContato.Tables(0).Rows.Count > 0) Then
                        prvIDContato = dsContato.Tables("DC_Contatos").Rows(0).Item("IDContato")
                        txtIDContato.Text = prvIDContato
                        txtContato.Text = dsContato.Tables("DC_Contatos").Rows(0).Item("NomeContato").ToString
                    End If
                    Me.modoAtual = Me.modoAtual

                End If
            End If

        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.Critical, Me.Text)
        End Try
    End Sub

    Private Sub CarregaDadosVisita()
        Dim dsContato As New DataSet
        Dim dsVisitas As New DataSet
        Dim iIdStatus As Int32

        Try
            dsVisitas = objVisitas.dsVisitasPorPeriodo(prvDataVisita, prvDataVisita, prvIDCliente, 0, prvIDContato, 0, False)

            If (Not dsVisitas Is Nothing AndAlso dsVisitas.Tables(0).Rows.Count > 0) Then
                With dsVisitas.Tables(0)
                    Me.Codigo = prvIDCliente
                    txtIDCliente.Text = .Rows(0).Item("IDCliente")
                    txtNomeCliente.Text = .Rows(0).Item("RazaoSocial")
                    dtData.Text = CDate(.Rows(0).Item("DataVisita")).ToShortDateString
                    dtHora.Text = CDate(.Rows(0).Item("HoraVisita")).ToShortTimeString
                    txtIDContato.Text = perConversao.nuloParaVazio(.Rows(0).Item("IDContato").ToString)
                    txtContato.Text = perConversao.nuloParaVazio(.Rows(0).Item("NomeContato").ToString)
                    txtRegiao.Text = perConversao.nuloParaVazio(.Rows(0).Item("Regiao").ToString)
                    iIdStatus = perConversao.nuloParaZero(.Rows(0).Item("IdStatus").ToString)
                    lblStatusCliente.Text = objStatus.retornarCampoStatus("Descricao", iIdStatus).Item("Descricao").ToString
                End With
                Me.modoAtual = eModo.eAguardar
            End If

        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.Critical, Me.Text)
        End Try
    End Sub

#End Region

    Private Sub frmCadVisitas_Activated(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Activated

        cmdSugerir.Visible = Persistencia.perConversao.nuloParaBoleano( _
                             objConfiguracoes.RetornaConfiguracoes("SugerirVisita").Item("SugerirVisita"))

    End Sub

    Private Sub frmContatoAgendado_alteraModo(ByVal eModoAtual As frmPadrao.eModo) Handles Me.alteraModo

        If (eModoAtual = eModo.eAguardar Or eModoAtual = eModo.eExcluir) Then
            Me.txtIDCliente.Enabled = False
            Me.txtNomeCliente.Enabled = False
            Me.txtRegiao.Enabled = False
            Me.cmdProcura.Enabled = False
            Me.cmdEditarCliente.Enabled = False
            Me.cmdLimparCliente.Enabled = False
            Me.cmdProcuraContato.Enabled = False
            Me.cmdEditarContato.Enabled = False
            Me.cmdLimparContato.Enabled = False
            Me.txtObservacoes.Enabled = False
            dtData.Enabled = False
            dtHora.Enabled = False
            cmdSugerir.Enabled = False
        Else
            Me.txtIDCliente.Enabled = True
            Me.txtNomeCliente.Enabled = True
            Me.txtRegiao.Enabled = True
            Me.cmdProcura.Enabled = (modoAtual = eModo.eInserir)
            Me.cmdEditarCliente.Enabled = (prvIDCliente > 0 And modoAtual = eModo.eInserir)
            Me.cmdLimparCliente.Enabled = (prvIDCliente > 0 And modoAtual = eModo.eInserir)
            Me.cmdProcuraContato.Enabled = (prvIDCliente > 0 And modoAtual = eModo.eInserir)
            Me.cmdEditarContato.Enabled = (prvIDCliente > 0 And modoAtual = eModo.eInserir)
            Me.cmdLimparContato.Enabled = (prvIDContato > 0 And modoAtual = eModo.eInserir)
            Me.txtIDContato.Enabled = (prvIDContato > 0)
            Me.txtContato.Enabled = (prvIDContato > 0)
            Me.txtObservacoes.Enabled = (prvIDContato > 0)
            dtData.Enabled = (prvIDContato > 0 And modoAtual = eModo.eInserir)
            dtHora.Enabled = (prvIDContato > 0)
            cmdSugerir.Enabled = (prvIDContato > 0 And modoAtual = eModo.eInserir)
        End If
    End Sub

    Private Sub frmContatoAgendado_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Me.Codigo = prvIDVisita
        If (prvIDCliente > 0 And prvIDContato > 0 And prvDataVisita <> Date.MinValue) Then
            CarregaDadosVisita()
        Else

            Me.modoAtual = eModo.eInserir
            CarregaDadosCliente()
        End If
        lblDiaSemana.Text = RetornaDescricaoDiaSemana(CDate(dtData.Text).DayOfWeek)

    End Sub

    Private Sub cmdProcuraContato_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdProcuraContato.Click
        Dim sql As String
        Dim frmDialogo As New frmPesquisa
        Dim sNomeContato As String

        Try

            If (prvIDCliente > 0) Then
                sql = Me.objContato.sqlConsulta(prvIDCliente)

                With frmDialogo
                    .Campos = "iIDContato,sNomeContato"
                    .Descricoes = "Código,Nome"
                    .Larguras = "50,300"

                    .Sql = sql
                    .Titulo = "Pesquisa Contato"
                    .CarregaTela()
                    If .DS.Tables(0).Rows.Count > 0 Then
                        .ShowDialog()
                        If (.DialogResult = Windows.Forms.DialogResult.OK) Then
                            Me.prvIDContato = .Id
                            sNomeContato = objContato.selecionarContato(prvIDContato, prvIDCliente, False). _
                                              Tables("DC_Contatos").Rows(0).Item("NomeContato").ToString
                            txtContato.Text = sNomeContato
                            txtIDContato.Text = prvIDContato
                            Me.modoAtual = eModo.eInserir
                        End If
                    Else
                        MsgBox("Registro não encontrado", MsgBoxStyle.Exclamation, Me.Text)
                        Me.prvIDContato = 0
                    End If

                End With
            Else
                MsgBox("Cliente não selecionado.", MsgBoxStyle.Information, Me.Text)

            End If
        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.Critical, Me.Text)
        End Try

    End Sub

    Private Sub cmdProcura_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdProcura.Click
        Dim sql As String
        Dim frmDialogo As New frmPesquisa

        Try
            sql = Me.objClientes.SqlConsulta(False)

            prvIDCliente = 0
            prvIDContato = 0

            Limpar(Me)

            With frmDialogo
                .Campos = "iIDCliente,sRazaoSocial"
                .Descricoes = "Código,Cliente"
                .Larguras = "50,300"
                .Sql = sql
                .Titulo = "Pesquisa Cliente"
                .CarregaTela()
                If .DS.Tables(0).Rows.Count > 0 Then
                    .ShowDialog()
                    If (.DialogResult = Windows.Forms.DialogResult.OK) Then
                        Me.Codigo = .Id
                        Me.prvIDCliente = .Id
                        Me.CarregaDadosCliente()
                    End If
                Else
                    MsgBox("Registro não encontrado", MsgBoxStyle.Exclamation, Me.Text)
                    Me.prvIDCliente = 0
                    MyBase.Limpar(Me)
                    Exit Sub
                End If

            End With

        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.Critical, Me.Text)
        End Try

    End Sub

    Private Sub cmdGravar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdGravar.Click
        Dim idUsuario As Int32
        Dim bResultado As Boolean

        Dim dtDataContato As Date

        Try
            dtDataContato = CDate(dtData.Text)
            idUsuario = frmPrincipal.objUsuario.Usuario

            If (Me.ValidarFormulario) Then

                If (objVisitas.SalvarVisitaAgendada(prvModoTela, prvIDCliente, prvIDContato, idUsuario, _
                                                        txtObservacoes.Text.ToString, dtData.Text, dtHora.Text)) Then
                    bResultado = True
                Else
                    bResultado = False
                End If

            Else
                If (Me.sMensagemValidacao <> String.Empty) Then
                    MsgBox(Me.sMensagemValidacao, MsgBoxStyle.Exclamation, Me.Text)
                End If

                bResultado = False
            End If

            If (bResultado) Then
                Me.modoAtual = eModo.eAguardar
            Else
                Me.modoAtual = Me.modoAtual
            End If

        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.Critical, Me.Text)
        End Try

    End Sub

    Private Sub cmdNovo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdNovo.Click
        prvModoTela = ModoTela.eCadastro
        dtData.Text = Date.Now.Date
        dtHora.Text = Date.Now
        txtObservacoes.Text = ""
    End Sub

    Private Sub cmdSugerir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdSugerir.Click
        Dim objteste As New ctrDiaAtendimento
        Dim dsDias As New DataSet
        Dim dtDia As Date

        Try
            If (prvIDRegiao > 0) Then
                dtDia = CDate(dtData.Text)

                dsDias = objteste.retornarDiasSugeridos(dtDia, prvIDRegiao)

                If (Not dsDias Is Nothing AndAlso dsDias.Tables("DiasSugestao").Rows.Count > 0) Then
                    With dsDias.Tables("DiasSugestao")
                        dtData.Text = CDate(.Rows(0).Item("Data").ToString)
                        lblDiaSemana.Text = RetornaDescricaoDiaSemana(CDate(dtData.Text).DayOfWeek)
                    End With
                End If
            Else
                MsgBox("Para utilizar esta opção é necessário que a região do cliente seja definida.", _
                       MsgBoxStyle.Information, Me.Text)
            End If

        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.Critical, Me.Text)
        End Try



    End Sub

    Private Sub cmdEditarCliente_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdEditarCliente.Click
        Dim frmTelaCliente As New frmCliente

        With frmTelaCliente
            .IDCliente = prvIDCliente

            If (.ShowDialog() = Windows.Forms.DialogResult.OK) Then
                prvIDCliente = .IDCliente
                CarregaDadosCliente()
            End If

        End With
    End Sub

    Private Sub cmdLimparCliente_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdLimparCliente.Click
        prvIDCliente = 0
        prvIDContato = 0
        Limpar(Me)
    End Sub

    Private Sub cmdEditarContato_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdEditarContato.Click

        Dim frmContatos As New frmContato2
        With frmContatos
            .IDCliente = Me.prvIDCliente
            .IDContato = Me.prvIDContato
            .NomeCliente = txtNomeCliente.Text
            If (.ShowDialog() = Windows.Forms.DialogResult.OK) Then
                prvIDContato = .IDContato
                txtContato.Text = objContato.selecionarContato(prvIDContato, prvIDCliente, False). _
                                  Tables("DC_Contatos").Rows(0).Item("NomeContato").ToString
                txtIDContato.Text = prvIDContato
                Me.modoAtual = modoAtual
            End If
        End With

    End Sub

    Private Sub cmdLimparContato_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdLimparContato.Click

        prvIDContato = 0
        txtIDContato.Text = String.Empty
        txtContato.Text = String.Empty

    End Sub

    Private Sub cmdCancelar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdCancelar.Click

        If (Me.modoAtual = eModo.eEditar) Then
            prvModoTela = ModoTela.eEdicao
        End If

    End Sub
End Class
